from gmpy2 import lcm, invert
import libnum
from Crypto.Util.number import *
import uuid
import gmpy2

flag = "flag{" + str(uuid.uuid4()) + "}"
print(flag)
e = 65537
p = getPrime(512)
q = getPrime(512)
n = p**4*q

c = pow(libnum.s2n(flag), e, n)
print("c=",c)

h1 = (invert(e, lcm(p - 1, q - 1))) % (p - 1)
print("h1=",h1)

b = 449703347709287328982446812318870158230369688625894307953604074502413258045265502496365998383562119915565080518077360839705004058211784369656486678307007348691991136610142919372779782779111507129101110674559235388392082113417306002050124215904803026894400155194275424834577942500150410440057660679460918645357376095613079720172148302097893734034788458122333816759162605888879531594217661921547293164281934920669935417080156833072528358511807757748554348615957977663784762124746554638152693469580761002437793837094101338408017407251986116589240523625340964025531357446706263871843489143068620501020284421781243879675292060268876353250854369189182926055204229002568224846436918153245720514450234433170717311083868591477186061896282790880850797471658321324127334704438430354844770131980049668516350774939625369909869906362174015628078258039638111064842324979997867746404806457329528690722757322373158670827203350590809390932986616805533168714686834174965211242863201076482127152571774960580915318022303418111346406295217571564155573765371519749325922145875128395909112254242027512400564855444101325427710643212690768272048881411988830011985059218048684311349415764441760364762942692722834850287985399559042457470942580456516395188637916303814055777357738894264037988945951468416861647204658893837753361851667573185920779272635885127149348845064478121843462789367112698673780005436144393573832498203659056909233757206537514290993810628872250841862059672570704733990716282248839
a = 2021*p**3 + 2022 + 2023*p**4

h2 = pow(2, a, b)
print("h2=",h2)
c= 32461937291123838150015437738232132778136420835501172981733602990740273486953741568090810560778161966164945158511260774070358644248232323420087723385263256644196533073406984717180336745536558689984942092573081904079903490501386556080018394074410235002595317034773282955985118051270196236522237314803148550104312339887381647416993827777740145028707473690705297024951376596720342536992121548930518678367840538408090222135227089379157055839665026501357827048478457911999587594147965082828271987647298414995124826623670109344083974284447663062399760045862177923687178825610208304215451278227328518587611057109711358853294506221375136820608279989589848521299683305678250602533798187554673551619882364862267158445783085217884637473353723296775978631814700691324134568859907895
h1= 6468066142812037811245811431029822620718431256172659827318030980766740646875043754362691871361354796260760544851348386608059020178469741472552508428173289
h2= 351478273201661211370295992513903777012232983256056326238926333011371416629716162090104619674265156821223231264440443106892542064223779557190578501438946789254030402887731165540882104924377245618854941216703766237750410854631060908813070299202115362296699264192874798844168699489382003184297636998658037654020552631141141481533724848408730766978666934663108281432306938240589659207658915367966527390442015149064586761425865121150449377751372147728656649385001186886613722056101089644760097824725460868377846871014862553706199913248258756627415862049990930575534515661975085378650331550364542391008296344006652888696620145918034387172113175331348860126630098919166159292368091989313853372136462265585305145884122967878506561782844123480811218779889510208850962460012465794314560056622761602155517368256657436574200550175391109703542446602958770962969052052583500083109117156883274443244413957241956500358988509636068466704579092280477518578401466531668151425943794220167624532301055735350960510647752822557866484507869680755962572543981925722715965036598298885934266602923923707916902509373496039520863385795284014251153812592261523739279076312435443855905731512330578566935163359461268001866134231813803645925451787175145307904432223492155424053234885837529083612476468041346070430454900321918429553742127313743695536776850119228648659264206244539519000463928289312181246535035193277156799865273087461179498380447714523567927904242841451750445973237705788122212246137382847
